<?php
namespace app\controller;

use app\BaseController;
use think\facade\Db;
use think\facade\Request;

class Api extends BaseController
{
    public function baidu(){
        // 调试信息
        $debug = [
            'is_post' => Request::isPost(),
            'content_type' => Request::header('Content-Type'),
            'raw_input' => file_get_contents('php://input'),
            'post_data' => input('post.'),
            'json_data' => Request::param()
        ];
        
        $p = '';  // 初始化变量
        $to = '';  // 初始化目标语言变量
        
        // 尝试多种方式获取数据
        if (Request::isPost()){
            // 尝试从post直接获取
            $p = input('post.p');
            $to = input('post.to');
            
            // 如果为空，尝试从JSON数据获取
            if(empty($p) || empty($to)) {
                $jsonData = json_decode(file_get_contents('php://input'), true);
                if(isset($jsonData['p'])) {
                    $p = $jsonData['p'];
                }
                if(isset($jsonData['to'])) {
                    $to = $jsonData['to'];
                }
            }
            
            // 如果还是为空，尝试从param获取
            if(empty($p)) {
                $p = Request::param('p');
            }
            if(empty($to)) {
                $to = Request::param('to');
            }
        }
        
        // 如果to参数为空，默认翻译为中文
        if(empty($to)) {
            $to = 'zh';  // 默认翻译为中文
        }
        
        // 记录最终获取到的值
        $debug['final_p'] = $p;
        $debug['final_to'] = $to;
        
        // 返回调试信息（仅用于测试）
        if(empty($p)) {
            return json(['error' => '翻译文本不能为空', 'debug' => $debug], 400);
        }
        
        // 确保多行文本能够正确处理
        // 百度翻译API要求对换行符进行处理
        $p = str_replace(["\r\n", "\r", "\n"], " ", $p);

        // 从数据库获取配置
        $sets = Db::table("set")->where('setid','1')->find();
        
        // 检查数据库查询结果
        if (empty($sets)) {
            return json(['error' => '翻译服务配置未找到', 'debug' => ['db_result' => $sets]], 500);
        }
        
        // 检查必要的配置字段是否存在
        if (!isset($sets['baidu_app_id']) || !isset($sets['baidu_secret_key'])) {
            return json([
                'error' => '翻译服务配置字段不存在', 
                'debug' => [
                    'db_fields' => array_keys($sets),
                    'missing_appid' => !isset($sets['baidu_app_id']),
                    'missing_key' => !isset($sets['baidu_secret_key'])
                ]
            ], 500);
        }
        
        $appid = $sets['baidu_app_id'];
        $key = $sets['baidu_secret_key'];

        if (empty($appid) || empty($key)) {
            return json(['error' => '翻译服务配置错误'], 500);
        }

        // 生成签名参数
        $url = "https://fanyi-api.baidu.com/api/trans/vip/translate";
        $salt = mt_rand(10000, 99999);
        $sign = md5($appid . $p . $salt . $key);

        // 构造请求参数
        $params = [
            'q'     => $p,
            'from'  => 'auto',       // 自动检测源语言
            'to'    => $to,          // 使用传入的目标语言或默认中文
            'appid' => $appid,
            'salt'  => $salt,
            'sign'  => $sign,
        ];

        try {
            // 使用cURL发送翻译请求
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
            curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/x-www-form-urlencoded']);
            $response = curl_exec($ch);
            $error = curl_error($ch);
            curl_close($ch);
            
            if ($error) {
                throw new \Exception("cURL Error: " . $error);
            }
            
            $result = json_decode($response, true);
            
            // 处理API错误
            if (isset($result['error_code'])) {
                return json([
                    'error'   => '翻译接口错误',
                    'code'    => $result['error_code'],
                    'message' => $result['error_msg']
                ], 500);
            }

            // 返回翻译结果
            return json([
                'result' => $result['trans_result'][0]['dst'] ?? ''
            ]);

        } catch (\Exception $e) {
            // 处理网络异常
            return json([
                'error'   => '请求失败',
                'message' => $e->getMessage()
            ], 500);
        }
    }
}